<?php
/**
 * Расширения класса вида.
 *
 *
 * @author     nrnwest@gmail.com
 */
class Arm_View extends Zend_View
{

   
    /**
     * Processes a view script and returns the output.
     *
     * @param string $name The script script name to process.
     * @return string The script output.
     */
    public function render($name)
    {
        // В режиме разработки выводит коменты которые дадут находить шаблоны с которых сосздана страница.
        if($this->_isRunDebugInfo()) {
            $microtime = microtime(1);
            $baseName = basename(Arm_Core::getPathApplication());
            $fileName = preg_replace('~.*' . $baseName . '~',
            '...' . DIRECTORY_SEPARATOR . $baseName,
            $this->_script($name));
            $result = parent::render($name);
            $str =  PHP_EOL . '<!-- Start File ' . $fileName . ' -->' . PHP_EOL;
            $str .= $this->_getAllPathsRun();
            $str .= $result;
            $str .= PHP_EOL . '<!-- End File ' . $fileName . ' Time run: ' .
             Arm_Core::getTimeRun($microtime, microtime(1)) . ' -->' . PHP_EOL;
            return $str;
        }
        return parent::render($name);
    }

    /**
     * Выполнения шаблона вида, через вызов метода eval
     *
     * @param string $str шаблон вида в виде строки.
     * @param string $idStr индефикатор который в случи ошибки даст возможность понять где находиться ошибочный код.
     */
    public function renderEval($str, $idStr)
    {
        if($this->_isRunDebugInfo()) {
        $startTime = microtime(1);
        $result  = PHP_EOL . '<!-- Start Id EvalStr ' . $idStr . ' -->' . PHP_EOL;
        // выведем путя которые подключаются
        $result .= $this->_getAllPathsRun();
        $res = $this->_runEval($str);
        $result .= $res;
        $result .= PHP_EOL . '<!-- End Id EvalStr ' . $idStr . ' Time run:' .Arm_Core::getTimeRun($startTime, microtime(1)) . ' -->' . PHP_EOL;
        return  $result;
        }   
        return $this->_runEval($str);
    }
    
    /**
     * Вернет установленные текущие путя в объекте вида.
     * 
     * @return string
     */
    protected function _getAllPathsRun()
    {
        $str = '<!-- PATHS: ' . PHP_EOL;
       foreach ($this->getAllPaths() as $k=>$v) {
           if($v === array()) {
               $str .= $k . '= NULL' . PHP_EOL; 
           } else {
               foreach ($v as $kk=>$vv) {
                   $str .= $k .'=' . $kk . '=' . implode(PHP_EOL, (array)$vv) . PHP_EOL;
               }
           }
       }
       
       $str .=  ' PATHS END. -->' . PHP_EOL;
       return $str;
    }
    
    /**
     * Выводить иформацю для отладки или нет.
     */
    protected function _isRunDebugInfo()
    {
      $s = Arm_Core::getEnvironment();
      if(Arm_Core::getConfigApplication()->system->viewPathTemplate === '0' or $s === 'testing' or $s === 'staging') {
          return false;
      }
      return true;
    }

    /**
     * Выполнения скрипат вида в виде строки
     *
     * @param  string $str строка для выполнения в eval
     * @return string
     */
    protected function _runEval($str)
    {
        ob_start();
        
         eval('?>' . $str);
       
        return ob_get_clean();
    }
}
